home *** CD-ROM | disk | FTP | other *** search
/ The Best of MacTutor - S…e Code for Volumes 1 to 5 / The Best of MacTutor - Source Code for Volume 1-5 (Wayzata Technology)(6031)(1990).bin / Source Code / #06 (Feb 86) / pascal 2.2 / Random.Sound_to_Clip < prev    next >
Text File  |  1985-12-20  |  2KB  |  75 lines

  1. program Random_Number_FFWave;
  2.  uses
  3.   sane;
  4.  const
  5.   WTSize = 22200;{ 370*60=one second of sound }
  6.  
  7.  type
  8.   ptr = ^integer;
  9.   Handle = ^ptr;
  10.  
  11.   MySynthH = ^MySynthP;
  12.   MySynthP = ^MySynthRec;
  13.  
  14.   mySynthRec = record
  15.     mode : integer;
  16.     rate : fixed;
  17.     WaveBytes : packed array[0..22199] of char;{ WTSize bytes }
  18.    end;
  19.  
  20.  var
  21.   waveH : MySynthH;
  22.   n, i, ticks, retraces : integer;
  23.  
  24.  procedure Wave_to_Clip (waveH : MySynthH;
  25.          name : str255);
  26.   var
  27.    TheType, llength, lll : longint;
  28.    str : str255;
  29. { The Hlock that is predefined does not work!!! }
  30.   procedure Hlock (H : Handle);
  31.    var
  32.     regs : array[0..12] of longint;
  33.   begin
  34.    regs[0] := ord(h);{ set A0 }
  35.    Generic($A029, regs);
  36.   end;
  37.  begin
  38.   lll := LinlineF($A9FC);{ ZeroScrap }
  39.   str := 'WAVE';
  40.   BlockMove(@str[1], @TheType, 4);{ TheType:='WAVE' }
  41.   llength := GetHandleSize(waveH);
  42.   Hlock(pointer(ord(waveH)));
  43.   lll := LinlineF($A9FE, llength, theType, waveH^);{ PutScrap}
  44.   Hunlock(pointer(ord(waveH)));
  45.  
  46.   llength := Length(name);
  47.   str := 'TEXT';
  48.   BlockMove(@str[1], @TheType, 4);{ TheType:='TEXT' }
  49.   lll := LinlineF($A9FE, llength, theType, @name[1]);{ PutScrap}
  50.  end;
  51.  
  52.  
  53. begin
  54.  waveH := NewHandle(WTSize + 6);{ size of mySynthRec }
  55.  waveH^^.mode := FFMode;
  56.  waveH^^.rate := FixRatio(1, 1);
  57.  
  58.  ShowDrawing;
  59.  textmode(srcCopy);
  60.  n := 128;
  61.  for ticks := 0 to 59 do{ 60 ticks }
  62.   begin
  63.    moveto(0, 256 - n);
  64.    for retraces := 0 to 369 do{ 370 retraces }
  65.     begin
  66.      i := retraces + ticks * 370;
  67.      n := random mod 256;
  68.      waveH^^.WaveBytes[i] := chr(n);
  69.      lineto(retraces, 256 - n);
  70.     end;{ of retraces loop }
  71.    DrawString(Stringof(ticks));
  72.   end;{ of ticks loop }
  73.  Wave_to_Clip(waveH, 'Random number Waveform');
  74.  DisposeHandle(waveH);
  75. end.